def make_markdown_table(table, alignement: str =None):
"""
Args:
table: La table python à convertir en table markdown.
Elle doit être une liste de listes (rectangulaire).
alignement: L'alignement des cesllules ('gauche', 'centre' ou 'droite').
"""
# transformer tous les éléments en str
= [[str(elt) for elt in line] for line in table]
table # récupérer la largeur de chaque colonne
= [max(len(line[i]) for line in table) for i in range(len(table[0]))]
widths # faire que la largeur de chaque colonne soit au moins 3
= [max(w, 3) for w in widths]
widths # centrer le texte dans les colonnes
= [[elt.center(w) for elt, w in zip(line, widths)] for line in table]
table
# séparer les titres et le contenu
*liste_contenu = table
liste_titres,
# formatter les titres
= '| ' + ' | '.join(liste_titres) + ' |'
titres
# mettre l'alignement des cellules
= str(alignement).lower()
alignement if alignement == 'none':
# on modifie uniquement la position des ":"
# par défaut il n'y en a aucun
= '| '
bord_gauche = ' | '
bord_centre = ' |'
bord_droite elif alignement == 'centre':
= '|:'
bord_gauche = ':|:'
bord_centre = ':|'
bord_droite elif alignement == 'gauche':
= '|:'
bord_gauche = ' |:'
bord_centre = ' |'
bord_droite elif alignement == 'droite':
= '| '
bord_gauche = ':| '
bord_centre = ':|'
bord_droite else:
raise ValueError("l'alignement doit être 'gauche', 'centre' ou 'droite'.")
# la ligne de séparation entre les titres et le contenu
= bord_gauche + bord_centre.join(['-'*w for w in widths]) + bord_droite
separateur
# le contenu de la table
= [None] * len(liste_contenu) # liste vide qui sera remplie ensuite
contenu for idx, ligne in enumerate(liste_contenu):
# pour chaque ligne, on modifie le contenu au bon indice
= '| ' + ' | '.join(ligne) + ' |'
contenu[idx] = '\n'.join(contenu) # on regroupe les lignes
contenu
return titres + '\n' + separateur + '\n' + contenu
La syntaxe markdown est très pratique, car elle est légère, lisible, et qu’elle peut être facilement exportée dans de nombreux autre formats (notamment via pandoc).
Certains dialectes du markdown (des flavours) intègrent la possibilité de faire des tableaux. Cela permet donc d’intégrer des données dans un document.
Ce script vous permet de transformer des listes python en tables markdown, pour intégrer les résultats d’un calcul dans un document markdown :
Exemples
from math import pi
= [["colonne", "colonne 2", "colonne avec un nom super long"],
T 1, 42, "contenu"],
["super", "cool", 73],
["contenu assez long", pi, "valeur"]]
[
print(make_markdown_table(T))
print("\nAlignée à gauche")
print(make_markdown_table(T, alignement='gauche'))
print("\nAlignée au centre")
print(make_markdown_table(T, alignement='centre'))
print("\nAlignée à droite")
print(make_markdown_table(T, alignement='droite'))
| colonne | colonne 2 | colonne avec un nom super long |
| ------------------ | ----------------- | ------------------------------ |
| 1 | 42 | contenu |
| super | cool | 73 |
| contenu assez long | 3.141592653589793 | valeur |
Alignée à gauche
| colonne | colonne 2 | colonne avec un nom super long |
|:------------------ |:----------------- |:------------------------------ |
| 1 | 42 | contenu |
| super | cool | 73 |
| contenu assez long | 3.141592653589793 | valeur |
Alignée au centre
| colonne | colonne 2 | colonne avec un nom super long |
|:------------------:|:-----------------:|:------------------------------:|
| 1 | 42 | contenu |
| super | cool | 73 |
| contenu assez long | 3.141592653589793 | valeur |
Alignée à droite
| colonne | colonne 2 | colonne avec un nom super long |
| ------------------:| -----------------:| ------------------------------:|
| 1 | 42 | contenu |
| super | cool | 73 |
| contenu assez long | 3.141592653589793 | valeur |